package com.ali.gts.servlet.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.util.concurrent.TimeUnit;


import static com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY;


/**
 *
 *   表单重复提交得情况
 *     1、表单提交后 一直点击刷新页面，造成重复的请求
 *           解决方式：请求的重定向，这样就换了另一个地址，转发还是同一个请求，地址栏每次都是同一个请求
 *           按钮置灰
 *     2、用户正常的提交，由于网络的原因导致一直接收不到响应，着急多点了几次导致多次提交
 *           按钮置灰
 *     3、用户正常的提交后，页面回退到有表单的页面再次点击提交按钮
 *
 *     4、第二个和第三个问题的解决可以通过验证码来解决。
 *
 *
 *
 *     验证码起作用的逻辑
 *          先从session中获取验证码对应的key,然后立马删除，
 *          然后session和表单传过来的code进行比较。如果一致是第一次提交，如果不一致就是重复提交。
 *
 *     4、切换验证码
 *         给验证码添加一个绑定事件，单击事件
 *
 *
 */
public class KaptchController extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        //从Session中获取token,生成验证码的时候谷歌的jar包会把信息放到session中
        String token = (String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY);
        //从session中移除可以是KAPTCHA_SESSION_KEY的信息
        req.getSession().removeAttribute(KAPTCHA_SESSION_KEY);

        String code = req.getParameter("code");
        String userName = req.getParameter("username");

        if(token != null && token.equalsIgnoreCase(code)){
            System.out.println("保存到数据库："+userName);
            resp.sendRedirect(req.getContextPath()+"/ok.jsp");

        }else {
            System.out.println("请不用重复的提交表单");
        }



    }
}
